package com.muyu.marketing.bargain.domain.req;

import jakarta.validation.constraints.*;
import lombok.Data;

import java.math.BigDecimal;
import java.util.Date;

/**
 * 砍价商品请求DTO
 * 
 * @author muyu
 * @date 2025-01-27
 */
@Data
public class BargainProductReq {
    
    /** 商品ID */
    @NotNull(message = "商品ID不能为空")
    private Long productId;

    /** 商品名称 */
    @NotBlank(message = "商品名称不能为空")
    private String productName;

    /** 商品图片 */
    private String productImage;

    /** 商品描述 */
    private String productDescription;

    /** 原价 */
    @NotNull(message = "原价不能为空")
    @DecimalMin(value = "0.01", message = "原价必须大于0")
    private BigDecimal originalPrice;

    /** 砍价价格 */
    @NotNull(message = "砍价价格不能为空")
    @DecimalMin(value = "0.01", message = "砍价价格必须大于0")
    private BigDecimal bargainPrice;

    /** 最低砍价价格 */
    @NotNull(message = "最低砍价价格不能为空")
    @DecimalMin(value = "0.01", message = "最低砍价价格必须大于0")
    private BigDecimal minBargainPrice;

    /** 库存数量 */
    @NotNull(message = "库存数量不能为空")
    @Min(value = 1, message = "库存数量必须大于0")
    private Integer stock;

    /** 开始时间 */
    @NotNull(message = "开始时间不能为空")
    private Date startTime;

    /** 结束时间 */
    @NotNull(message = "结束时间不能为空")
    private Date endTime;

    /** 砍价规则：1-固定金额，2-随机金额 */
    @NotNull(message = "砍价规则不能为空")
    @Min(value = 1, message = "砍价规则必须为1或2")
    @Max(value = 2, message = "砍价规则必须为1或2")
    private Integer bargainRule;

    /** 每次砍价金额（固定金额时使用） */
    private BigDecimal bargainAmount;

    /** 最小砍价金额（随机金额时使用） */
    private BigDecimal minBargainAmount;

    /** 最大砍价金额（随机金额时使用） */
    private BigDecimal maxBargainAmount;

    /** 砍价次数限制 */
    @Min(value = 1, message = "砍价次数限制必须大于0")
    private Integer bargainLimit;

    /** 排序 */
    private Integer sort;
}